package com.wt.springsamples.rabbitmq;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue testQueue() {
        return new Queue("queueName");
    }

    // 创建一个交换机
    @Bean
    public DirectExchange testExchange() {
        return new DirectExchange("exchangeName");
    }

    // 把队列和交换机绑定在一起
    @Bean
    public Binding testBinding(@Qualifier("queueName1")Queue testQueue, DirectExchange exchange) {
        return BindingBuilder.bind(testQueue).to(exchange).with("routingKey");
    }

    @Bean
    public TopicExchange exchange() {
        return new TopicExchange("exchangeName");  // 定义交换机
    }


    @Bean(name="queueName1")
    public Queue queueMessage1() {
        return new Queue("queueName1");      // 定义第一个队列，名称为 queueName1
    }
    @Bean(name="queueName2")
    public Queue queueMessage2() {
        return new Queue("queueName2");     // 定义第二个队列，名称为 queueName2
    }

    // 定义绑定关系，通过交换机 将名称为queueName1 的队列绑定到交换机上， routingKey 为 topic.key1
    @Bean
    public Binding bindingExchangeMessage(@Qualifier("queueName1") Queue queue, TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("topic.key1");
    }
    // 定义另一个绑定关系，通过交换机 将名称为queueName2 的队列绑定到交换机上 ，routingKey 是符合 通配符topic.#  的路由键
    // 如：topic.xx、topic.yy 等
    @Bean
    public Binding bindingExchangeMessages(@Qualifier("queueName2") Queue queue, TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("topic.#");//*表示一个词,#表示零个或多个词
    }

}
